/**
 * VIP状态全局mixin
 * @description 在tabBar页面切换时统一更新VIP状态
 */

import { getToken } from '@/utils/auth'

// 上次更新VIP状态的时间戳
let lastUpdateTime = 0
// VIP状态更新间隔（毫秒），避免频繁请求
const UPDATE_INTERVAL = 2000

export default {
  onShow() {
    // 安全检查：确保 this 和必要属性存在
    if (!this) {
      return
    }

    try {
      // 判断是否为tabBar页面
      const pages = getCurrentPages()
      if (!pages || pages.length === 0) {
        return
      }
      
      const currentPage = pages[pages.length - 1]
      if (!currentPage || !currentPage.route) {
        return
      }
      
      const route = currentPage.route
      
      const tabBarPages = [
        'pages/index/index',
        'pages/tactics/tactics',
        'pages/progress/progress',
        'pages/data/index',
        'pages/my/my'
      ]
      
      // 如果是tabBar页面，更新VIP状态
      if (tabBarPages.includes(route)) {
        // 防止频繁请求
        const now = Date.now()
        if (now - lastUpdateTime < UPDATE_INTERVAL) {
          return
        }
        lastUpdateTime = now
        
        // 安全检查：确保 $store 存在
        if (!this.$store) {
          console.warn('$store 不存在，跳过VIP状态更新')
          return
        }
        
        // 如果有token，更新VIP状态
        const token = getToken()
        if (token) {
          // 使用 $nextTick 确保组件完全初始化后再调用
          this.$nextTick(() => {
            if (this.$store && this.$store.dispatch) {
              this.$store.dispatch('user/updateVipStatus').catch(err => {
                console.error('更新VIP状态失败:', err)
              })
            }
          })
        }
      }
    } catch (error) {
      // 捕获所有错误，避免影响页面正常显示
      console.error('VIP状态mixin执行错误:', error)
    }
  }
}

